/*
 * This file is part of tcpflow by Simson Garfinkel <simsong@acm.org>.
 * Originally by Will Glynn <will@willglynn.com>.
 *
 * This source code is under the GNU Public License (GPL) version 3.
 * See COPYING for details.
 *
 */

#ifndef __ASIO2_MIME_TYPES_HPP__
#define __ASIO2_MIME_TYPES_HPP__

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma once
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)

#include <cctype>
#include <algorithm>
#include <string>
#include <unordered_map>
#include <string_view>

#ifdef ASIO2_HEADER_ONLY
namespace bho::beast::http
#else
namespace boost::beast::http
#endif
{
	namespace
	{
		template<typename = void>
		std::string_view mimetype_to_extension(std::string_view mime_type)
		{
			static std::unordered_map<std::string_view, std::string_view> mime_map =
			{
				/* Generated from an OSX-provided mime.types, massaged somewhat by hand */
				{ "application/andrew-inset", "ez" },
				{ "application/applixware", "aw" },
				{ "application/atom+xml", "atom" },
				{ "application/atomcat+xml", "atomcat" },
				{ "application/atomsvc+xml", "atomsvc" },
				{ "application/ccxml+xml", "ccxml" },
				{ "application/cdmi-capability", "cdmia" },
				{ "application/cdmi-container", "cdmic" },
				{ "application/cdmi-domain", "cdmid" },
				{ "application/cdmi-object", "cdmio" },
				{ "application/cdmi-queue", "cdmiq" },
				{ "application/cu-seeme", "cu" },
				{ "application/davmount+xml", "davmount" },
				{ "application/dssc+der", "dssc" },
				{ "application/dssc+xml", "xdssc" },
				{ "application/ecmascript", "ecma" },
				{ "application/emma+xml", "emma" },
				{ "application/epub+zip", "epub" },
				{ "application/exi", "exi" },
				{ "application/font-tdpfr", "pfr" },
				{ "application/hyperstudio", "stk" },
				{ "application/ipfix", "ipfix" },
				{ "application/java-archive", "jar" },
				{ "application/java-serialized-object", "ser" },
				{ "application/java-vm", "class" },
				{ "application/javascript", "js" },
				{ "application/json", "json" },
				{ "application/lost+xml", "lostxml" },
				{ "application/mac-binhex40", "hqx" },
				{ "application/mac-compactpro", "cpt" },
				{ "application/mads+xml", "mads" },
				{ "application/marc", "mrc" },
				{ "application/marcxml+xml", "mrcx" },
				{ "application/mathematica", "mb" },
				{ "application/mathml+xml", "mathml" },
				{ "application/mbox", "mbox" },
				{ "application/mediaservercontrol+xml", "mscml" },
				{ "application/metalink4+xml", "meta4" },
				{ "application/mets+xml", "mets" },
				{ "application/mods+xml", "mods" },
				{ "application/mp21", "mp21" },
				{ "application/mp4", "mp4s" },
				{ "application/msword", "doc" },
				{ "application/mxf", "mxf" },
				{ "application/oda", "oda" },
				{ "application/oebps-package+xml", "opf" },
				{ "application/ogg", "ogx" },
				{ "application/onenote", "onetoc" },
				{ "application/patch-ops-error+xml", "xer" },
				{ "application/pdf", "pdf" },
				{ "application/pgp-encrypted", "pgp" },
				{ "application/pgp-signature", "asc" },
				{ "application/pics-rules", "prf" },
				{ "application/pkcs10", "p10" },
				{ "application/pkcs7-mime", "p7m" },
				{ "application/pkcs7-signature", "p7s" },
				{ "application/pkcs8", "p8" },
				{ "application/pkix-attr-cert", "ac" },
				{ "application/pkix-cert", "cer" },
				{ "application/pkix-crl", "crl" },
				{ "application/pkix-pkipath", "pkipath" },
				{ "application/pkixcmp", "pki" },
				{ "application/pls+xml", "pls" },
				{ "application/postscript", "ps" },
				{ "application/prs.cww", "cww" },
				{ "application/pskc+xml", "pskcxml" },
				{ "application/rdf+xml", "rdf" },
				{ "application/reginfo+xml", "rif" },
				{ "application/relax-ng-compact-syntax", "rnc" },
				{ "application/resource-lists+xml", "rl" },
				{ "application/resource-lists-diff+xml", "rld" },
				{ "application/rls-services+xml", "rs" },
				{ "application/rsd+xml", "rsd" },
				{ "application/rss+xml", "rss" },
				{ "application/rtf", "rtf" },
				{ "application/sbml+xml", "sbml" },
				{ "application/scvp-cv-request", "scq" },
				{ "application/scvp-cv-response", "scs" },
				{ "application/scvp-vp-request", "spq" },
				{ "application/scvp-vp-response", "spp" },
				{ "application/sdp", "sdp" },
				{ "application/set-payment-initiation", "setpay" },
				{ "application/set-registration-initiation", "setreg" },
				{ "application/shf+xml", "shf" },
				{ "application/smil+xml", "smil" },
				{ "application/sparql-query", "rq" },
				{ "application/sparql-results+xml", "srx" },
				{ "application/srgs", "gram" },
				{ "application/srgs+xml", "grxml" },
				{ "application/sru+xml", "sru" },
				{ "application/ssml+xml", "ssml" },
				{ "application/tei+xml", "teicorpus" },
				{ "application/thraud+xml", "tfi" },
				{ "application/timestamped-data", "tsd" },
				{ "application/vnd.3gpp.pic-bw-large", "plb" },
				{ "application/vnd.3gpp.pic-bw-small", "psb" },
				{ "application/vnd.3gpp.pic-bw-var", "pvb" },
				{ "application/vnd.3gpp2.tcap", "tcap" },
				{ "application/vnd.3m.post-it-notes", "pwn" },
				{ "application/vnd.accpac.simply.aso", "aso" },
				{ "application/vnd.accpac.simply.imp", "imp" },
				{ "application/vnd.acucobol", "acu" },
				{ "application/vnd.acucorp", "atc" },
				{ "application/vnd.adobe.air-application-installer-package+zip", "air" },
				{ "application/vnd.adobe.fxp", "fxp" },
				{ "application/vnd.adobe.xdp+xml", "xdp" },
				{ "application/vnd.adobe.xfdf", "xfdf" },
				{ "application/vnd.ahead.space", "ahead" },
				{ "application/vnd.airzip.filesecure.azf", "azf" },
				{ "application/vnd.airzip.filesecure.azs", "azs" },
				{ "application/vnd.amazon.ebook", "azw" },
				{ "application/vnd.americandynamics.acc", "acc" },
				{ "application/vnd.amiga.ami", "ami" },
				{ "application/vnd.android.package-archive", "apk" },
				{ "application/vnd.anser-web-certificate-issue-initiation", "cii" },
				{ "application/vnd.anser-web-funds-transfer-initiation", "fti" },
				{ "application/vnd.antix.game-component", "atx" },
				{ "application/vnd.apple.installer+xml", "mpkg" },
				{ "application/vnd.apple.mpegurl", "m3u8" },
				{ "application/vnd.aristanetworks.swi", "swi" },
				{ "application/vnd.audiograph", "aep" },
				{ "application/vnd.blueice.multipass", "mpm" },
				{ "application/vnd.bmi", "bmi" },
				{ "application/vnd.businessobjects", "rep" },
				{ "application/vnd.chemdraw+xml", "cdxml" },
				{ "application/vnd.chipnuts.karaoke-mmd", "mmd" },
				{ "application/vnd.cinderella", "cdy" },
				{ "application/vnd.claymore", "cla" },
				{ "application/vnd.cloanto.rp9", "rp9" },
				{ "application/vnd.clonk.c4group", "c4g" },
				{ "application/vnd.cluetrust.cartomobile-config", "c11amc" },
				{ "application/vnd.cluetrust.cartomobile-config-pkg", "c11amz" },
				{ "application/vnd.commonspace", "csp" },
				{ "application/vnd.contact.cmsg", "cdbcmsg" },
				{ "application/vnd.cosmocaller", "cmc" },
				{ "application/vnd.crick.clicker", "clkx" },
				{ "application/vnd.crick.clicker.keyboard", "clkk" },
				{ "application/vnd.crick.clicker.palette", "clkp" },
				{ "application/vnd.crick.clicker.template", "clkt" },
				{ "application/vnd.crick.clicker.wordbank", "clkw" },
				{ "application/vnd.criticaltools.wbs+xml", "wbs" },
				{ "application/vnd.ctc-posml", "pml" },
				{ "application/vnd.cups-ppd", "ppd" },
				{ "application/vnd.curl.car", "car" },
				{ "application/vnd.curl.pcurl", "pcurl" },
				{ "application/vnd.data-vision.rdz", "rdz" },
				{ "application/vnd.denovo.fcselayout-link", "fe_launch" },
				{ "application/vnd.dna", "dna" },
				{ "application/vnd.dolby.mlp", "mlp" },
				{ "application/vnd.dpgraph", "dpg" },
				{ "application/vnd.dreamfactory", "dfac" },
				{ "application/vnd.dvb.ait", "ait" },
				{ "application/vnd.dvb.service", "svc" },
				{ "application/vnd.dynageo", "geo" },
				{ "application/vnd.ecowin.chart", "mag" },
				{ "application/vnd.enliven", "nml" },
				{ "application/vnd.epson.esf", "esf" },
				{ "application/vnd.epson.msf", "msf" },
				{ "application/vnd.epson.quickanime", "qam" },
				{ "application/vnd.epson.salt", "slt" },
				{ "application/vnd.epson.ssf", "ssf" },
				{ "application/vnd.eszigno3+xml", "es3" },
				{ "application/vnd.ezpix-album", "ez2" },
				{ "application/vnd.ezpix-package", "ez3" },
				{ "application/vnd.fdf", "fdf" },
				{ "application/vnd.fdsn.mseed", "mseed" },
				{ "application/vnd.fdsn.seed", "seed" },
				{ "application/vnd.flographit", "gph" },
				{ "application/vnd.fluxtime.clip", "ftc" },
				{ "application/vnd.framemaker", "fm" },
				{ "application/vnd.frogans.fnc", "fnc" },
				{ "application/vnd.frogans.ltf", "ltf" },
				{ "application/vnd.fsc.weblaunch", "fsc" },
				{ "application/vnd.fujitsu.oasys", "oas" },
				{ "application/vnd.fujitsu.oasys2", "oa2" },
				{ "application/vnd.fujitsu.oasys3", "oa3" },
				{ "application/vnd.fujitsu.oasysgp", "fg5" },
				{ "application/vnd.fujitsu.oasysprs", "bh2" },
				{ "application/vnd.fujixerox.ddd", "ddd" },
				{ "application/vnd.fujixerox.docuworks", "xdw" },
				{ "application/vnd.fujixerox.docuworks.binder", "xbd" },
				{ "application/vnd.fuzzysheet", "fzs" },
				{ "application/vnd.genomatix.tuxedo", "txd" },
				{ "application/vnd.geogebra.file", "ggb" },
				{ "application/vnd.geogebra.tool", "ggt" },
				{ "application/vnd.geometry-explorer", "gex" },
				{ "application/vnd.geonext", "gxt" },
				{ "application/vnd.geoplan", "g2w" },
				{ "application/vnd.geospace", "g3w" },
				{ "application/vnd.gmx", "gmx" },
				{ "application/vnd.google-earth.kml+xml", "kml" },
				{ "application/vnd.google-earth.kmz", "kmz" },
				{ "application/vnd.grafeq", "gqf" },
				{ "application/vnd.groove-account", "gac" },
				{ "application/vnd.groove-help", "ghf" },
				{ "application/vnd.groove-identity-message", "gim" },
				{ "application/vnd.groove-injector", "grv" },
				{ "application/vnd.groove-tool-message", "gtm" },
				{ "application/vnd.groove-tool-template", "tpl" },
				{ "application/vnd.groove-vcard", "vcg" },
				{ "application/vnd.hal+xml", "hal" },
				{ "application/vnd.handheld-entertainment+xml", "zmm" },
				{ "application/vnd.hbci", "hbci" },
				{ "application/vnd.hhe.lesson-player", "les" },
				{ "application/vnd.hp-hpgl", "hpgl" },
				{ "application/vnd.hp-hpid", "hpid" },
				{ "application/vnd.hp-hps", "hps" },
				{ "application/vnd.hp-jlyt", "jlt" },
				{ "application/vnd.hp-pcl", "pcl" },
				{ "application/vnd.hp-pclxl", "pclxl" },
				{ "application/vnd.hydrostatix.sof-data", "sfd-hdstx" },
				{ "application/vnd.hzn-3d-crossword", "x3d" },
				{ "application/vnd.ibm.minipay", "mpy" },
				{ "application/vnd.ibm.modcap", "afp" },
				{ "application/vnd.ibm.rights-management", "irm" },
				{ "application/vnd.ibm.secure-container", "sc" },
				{ "application/vnd.iccprofile", "icc" },
				{ "application/vnd.igloader", "igl" },
				{ "application/vnd.immervision-ivp", "ivp" },
				{ "application/vnd.immervision-ivu", "ivu" },
				{ "application/vnd.insors.igm", "igm" },
				{ "application/vnd.intercon.formnet", "xpw" },
				{ "application/vnd.intergeo", "i2g" },
				{ "application/vnd.intu.qbo", "qbo" },
				{ "application/vnd.intu.qfx", "qfx" },
				{ "application/vnd.ipunplugged.rcprofile", "rcprofile" },
				{ "application/vnd.irepository.package+xml", "irp" },
				{ "application/vnd.is-xpr", "xpr" },
				{ "application/vnd.isac.fcs", "fcs" },
				{ "application/vnd.jam", "jam" },
				{ "application/vnd.jcp.javame.midlet-rms", "rms" },
				{ "application/vnd.jisp", "jisp" },
				{ "application/vnd.joost.joda-archive", "joda" },
				{ "application/vnd.kahootz", "ktz" },
				{ "application/vnd.kde.karbon", "karbon" },
				{ "application/vnd.kde.kchart", "chrt" },
				{ "application/vnd.kde.kformula", "kfo" },
				{ "application/vnd.kde.kivio", "flw" },
				{ "application/vnd.kde.kontour", "kon" },
				{ "application/vnd.kde.kpresenter", "kpr" },
				{ "application/vnd.kde.kspread", "ksp" },
				{ "application/vnd.kde.kword", "kwd" },
				{ "application/vnd.kenameaapp", "htke" },
				{ "application/vnd.kidspiration", "kia" },
				{ "application/vnd.kinar", "knp" },
				{ "application/vnd.koan", "skp" },
				{ "application/vnd.kodak-descriptor", "sse" },
				{ "application/vnd.las.las+xml", "lasxml" },
				{ "application/vnd.llamagraphics.life-balance.desktop", "lbd" },
				{ "application/vnd.llamagraphics.life-balance.exchange+xml", "lbe" },
				{ "application/vnd.lotus-1-2-3", "123" },
				{ "application/vnd.lotus-approach", "apr" },
				{ "application/vnd.lotus-freelance", "pre" },
				{ "application/vnd.lotus-notes", "nsf" },
				{ "application/vnd.lotus-organizer", "org" },
				{ "application/vnd.lotus-screencam", "scm" },
				{ "application/vnd.lotus-wordpro", "lwp" },
				{ "application/vnd.macports.portpkg", "portpkg" },
				{ "application/vnd.mcd", "mcd" },
				{ "application/vnd.medcalcdata", "mc1" },
				{ "application/vnd.mediastation.cdkey", "cdkey" },
				{ "application/vnd.mfer", "mwf" },
				{ "application/vnd.mfmp", "mfm" },
				{ "application/vnd.micrografx.flo", "flo" },
				{ "application/vnd.micrografx.igx", "igx" },
				{ "application/vnd.mif", "mif" },
				{ "application/vnd.mobius.daf", "daf" },
				{ "application/vnd.mobius.dis", "dis" },
				{ "application/vnd.mobius.mbk", "mbk" },
				{ "application/vnd.mobius.mqy", "mqy" },
				{ "application/vnd.mobius.msl", "msl" },
				{ "application/vnd.mobius.plc", "plc" },
				{ "application/vnd.mobius.txf", "txf" },
				{ "application/vnd.mophun.application", "mpn" },
				{ "application/vnd.mophun.certificate", "mpc" },
				{ "application/vnd.mozilla.xul+xml", "xul" },
				{ "application/vnd.ms-artgalry", "cil" },
				{ "application/vnd.ms-cab-compressed", "cab" },
				{ "application/vnd.ms-excel", "xls" },
				{ "application/vnd.ms-excel.addin.macroenabled.12", "xlam" },
				{ "application/vnd.ms-excel.sheet.binary.macroenabled.12", "xlsb" },
				{ "application/vnd.ms-excel.sheet.macroenabled.12", "xlsm" },
				{ "application/vnd.ms-excel.template.macroenabled.12", "xltm" },
				{ "application/vnd.ms-fontobject", "eot" },
				{ "application/vnd.ms-htmlhelp", "chm" },
				{ "application/vnd.ms-ims", "ims" },
				{ "application/vnd.ms-lrm", "lrm" },
				{ "application/vnd.ms-officetheme", "thmx" },
				{ "application/vnd.ms-pki.seccat", "cat" },
				{ "application/vnd.ms-pki.stl", "stl" },
				{ "application/vnd.ms-powerpoint", "ppt" },
				{ "application/vnd.ms-powerpoint.addin.macroenabled.12", "ppam" },
				{ "application/vnd.ms-powerpoint.presentation.macroenabled.12", "pptm" },
				{ "application/vnd.ms-powerpoint.slide.macroenabled.12", "sldm" },
				{ "application/vnd.ms-powerpoint.slideshow.macroenabled.12", "ppsm" },
				{ "application/vnd.ms-powerpoint.template.macroenabled.12", "potm" },
				{ "application/vnd.ms-project", "mpp" },
				{ "application/vnd.ms-word.document.macroenabled.12", "docm" },
				{ "application/vnd.ms-word.template.macroenabled.12", "dotm" },
				{ "application/vnd.ms-works", "wps" },
				{ "application/vnd.ms-wpl", "wpl" },
				{ "application/vnd.ms-xpsdocument", "xps" },
				{ "application/vnd.mseq", "mseq" },
				{ "application/vnd.musician", "mus" },
				{ "application/vnd.muvee.style", "msty" },
				{ "application/vnd.neurolanguage.nlu", "nlu" },
				{ "application/vnd.noblenet-directory", "nnd" },
				{ "application/vnd.noblenet-sealer", "nns" },
				{ "application/vnd.noblenet-web", "nnw" },
				{ "application/vnd.nokia.n-gage.data", "ngdat" },
				{ "application/vnd.nokia.n-gage.symbian.install", "n-gage" },
				{ "application/vnd.nokia.radio-preset", "rpst" },
				{ "application/vnd.nokia.radio-presets", "rpss" },
				{ "application/vnd.novadigm.edm", "edm" },
				{ "application/vnd.novadigm.edx", "edx" },
				{ "application/vnd.novadigm.ext", "ext" },
				{ "application/vnd.oasis.opendocument.chart", "odc" },
				{ "application/vnd.oasis.opendocument.chart-template", "otc" },
				{ "application/vnd.oasis.opendocument.database", "odb" },
				{ "application/vnd.oasis.opendocument.formula", "odf" },
				{ "application/vnd.oasis.opendocument.formula-template", "odft" },
				{ "application/vnd.oasis.opendocument.graphics", "odg" },
				{ "application/vnd.oasis.opendocument.graphics-template", "otg" },
				{ "application/vnd.oasis.opendocument.image", "odi" },
				{ "application/vnd.oasis.opendocument.image-template", "oti" },
				{ "application/vnd.oasis.opendocument.presentation", "odp" },
				{ "application/vnd.oasis.opendocument.presentation-template", "otp" },
				{ "application/vnd.oasis.opendocument.spreadsheet", "ods" },
				{ "application/vnd.oasis.opendocument.spreadsheet-template", "ots" },
				{ "application/vnd.oasis.opendocument.text", "odt" },
				{ "application/vnd.oasis.opendocument.text-master", "odm" },
				{ "application/vnd.oasis.opendocument.text-template", "ott" },
				{ "application/vnd.oasis.opendocument.text-web", "oth" },
				{ "application/vnd.olpc-sugar", "xo" },
				{ "application/vnd.oma.dd2+xml", "dd2" },
				{ "application/vnd.openofficeorg.extension", "oxt" },
				{ "application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx" },
				{ "application/vnd.openxmlformats-officedocument.presentationml.slide", "sldx" },
				{ "application/vnd.openxmlformats-officedocument.presentationml.slideshow", "ppsx" },
				{ "application/vnd.openxmlformats-officedocument.presentationml.template", "potx" },
				{ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx" },
				{ "application/vnd.openxmlformats-officedocument.spreadsheetml.template", "xltx" },
				{ "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx" },
				{ "application/vnd.openxmlformats-officedocument.wordprocessingml.template", "dotx" },
				{ "application/vnd.osgeo.mapguide.package", "mgp" },
				{ "application/vnd.osgi.dp", "dp" },
				{ "application/vnd.palm", "pdb" },
				{ "application/vnd.pawaafile", "paw" },
				{ "application/vnd.pg.format", "str" },
				{ "application/vnd.pg.osasli", "ei6" },
				{ "application/vnd.picsel", "efif" },
				{ "application/vnd.pmi.widget", "wg" },
				{ "application/vnd.pocketlearn", "plf" },
				{ "application/vnd.powerbuilder6", "pbd" },
				{ "application/vnd.previewsystems.box", "box" },
				{ "application/vnd.proteus.magazine", "mgz" },
				{ "application/vnd.publishare-delta-tree", "qps" },
				{ "application/vnd.pvi.ptid1", "ptid" },
				{ "application/vnd.quark.quarkxpress", "qxd" },
				{ "application/vnd.realvnc.bed", "bed" },
				{ "application/vnd.recordare.musicxml", "mxl" },
				{ "application/vnd.recordare.musicxml+xml", "musicxml" },
				{ "application/vnd.rig.cryptonote", "cryptonote" },
				{ "application/vnd.rim.cod", "cod" },
				{ "application/vnd.rn-realmedia", "rm" },
				{ "application/vnd.route66.link66+xml", "link66" },
				{ "application/vnd.sailingtracker.track", "st" },
				{ "application/vnd.seemail", "see" },
				{ "application/vnd.sema", "sema" },
				{ "application/vnd.semd", "semd" },
				{ "application/vnd.semf", "semf" },
				{ "application/vnd.shana.informed.formdata", "ifm" },
				{ "application/vnd.shana.informed.formtemplate", "itp" },
				{ "application/vnd.shana.informed.interchange", "iif" },
				{ "application/vnd.shana.informed.package", "ipk" },
				{ "application/vnd.simtech-mindmapper", "twd" },
				{ "application/vnd.smaf", "mmf" },
				{ "application/vnd.smart.teacher", "teacher" },
				{ "application/vnd.solent.sdkm+xml", "sdkm" },
				{ "application/vnd.spotfire.dxp", "dxp" },
				{ "application/vnd.spotfire.sfs", "sfs" },
				{ "application/vnd.stardivision.calc", "sdc" },
				{ "application/vnd.stardivision.draw", "sda" },
				{ "application/vnd.stardivision.impress", "sdd" },
				{ "application/vnd.stardivision.math", "smf" },
				{ "application/vnd.stardivision.writer", "sdw" },
				{ "application/vnd.stardivision.writer-global", "sgl" },
				{ "application/vnd.stepmania.stepchart", "sm" },
				{ "application/vnd.sun.xml.calc", "sxc" },
				{ "application/vnd.sun.xml.calc.template", "stc" },
				{ "application/vnd.sun.xml.draw", "sxd" },
				{ "application/vnd.sun.xml.draw.template", "std" },
				{ "application/vnd.sun.xml.impress", "sxi" },
				{ "application/vnd.sun.xml.impress.template", "sti" },
				{ "application/vnd.sun.xml.math", "sxm" },
				{ "application/vnd.sun.xml.writer", "sxw" },
				{ "application/vnd.sun.xml.writer.global", "sxg" },
				{ "application/vnd.sun.xml.writer.template", "stw" },
				{ "application/vnd.sus-calendar", "sus" },
				{ "application/vnd.svd", "svd" },
				{ "application/vnd.symbian.install", "sis" },
				{ "application/vnd.syncml+xml", "xsm" },
				{ "application/vnd.syncml.dm+wbxml", "bdm" },
				{ "application/vnd.syncml.dm+xml", "xdm" },
				{ "application/vnd.tao.intent-module-archive", "tao" },
				{ "application/vnd.tmobile-livetv", "tmo" },
				{ "application/vnd.trid.tpt", "tpt" },
				{ "application/vnd.triscape.mxs", "mxs" },
				{ "application/vnd.trueapp", "tra" },
				{ "application/vnd.ufdl", "ufdl" },
				{ "application/vnd.uiq.theme", "utz" },
				{ "application/vnd.umajin", "umj" },
				{ "application/vnd.unity", "unityweb" },
				{ "application/vnd.uoml+xml", "uoml" },
				{ "application/vnd.vcx", "vcx" },
				{ "application/vnd.visio", "vsd" },
				{ "application/vnd.visionary", "vis" },
				{ "application/vnd.vsf", "vsf" },
				{ "application/vnd.wap.wbxml", "wbxml" },
				{ "application/vnd.wap.wmlc", "wmlc" },
				{ "application/vnd.wap.wmlscriptc", "wmlsc" },
				{ "application/vnd.webturbo", "wtb" },
				{ "application/vnd.wolfram.player", "nbp" },
				{ "application/vnd.wordperfect", "wpd" },
				{ "application/vnd.wqd", "wqd" },
				{ "application/vnd.wt.stf", "stf" },
				{ "application/vnd.xara", "xar" },
				{ "application/vnd.xfdl", "xfdl" },
				{ "application/vnd.yamaha.hv-dic", "hvd" },
				{ "application/vnd.yamaha.hv-script", "hvs" },
				{ "application/vnd.yamaha.hv-voice", "hvp" },
				{ "application/vnd.yamaha.openscoreformat", "osf" },
				{ "application/vnd.yamaha.openscoreformat.osfpvg+xml", "osfpvg" },
				{ "application/vnd.yamaha.smaf-audio", "saf" },
				{ "application/vnd.yamaha.smaf-phrase", "spf" },
				{ "application/vnd.yellowriver-custom-menu", "cmp" },
				{ "application/vnd.zul", "zir" },
				{ "application/vnd.zzazz.deck+xml", "zaz" },
				{ "application/voicexml+xml", "vxml" },
				{ "application/widget", "wgt" },
				{ "application/winhlp", "hlp" },
				{ "application/wsdl+xml", "wsdl" },
				{ "application/wspolicy+xml", "wspolicy" },
				{ "application/x-7z-compressed", "7z" },
				{ "application/x-abiword", "abw" },
				{ "application/x-ace-compressed", "ace" },
				{ "application/x-authorware-map", "aam" },
				{ "application/x-authorware-seg", "aas" },
				{ "application/x-bcpio", "bcpio" },
				{ "application/x-bittorrent", "torrent" },
				{ "application/x-bzip", "bz" },
				{ "application/x-bzip2", "bz2" },
				{ "application/x-cdlink", "vcd" },
				{ "application/x-chat", "chat" },
				{ "application/x-chess-pgn", "pgn" },
				{ "application/x-cpio", "cpio" },
				{ "application/x-csh", "csh" },
				{ "application/x-debian-package", "deb" },
				{ "application/x-director", "dir" },
				{ "application/x-doom", "wad" },
				{ "application/x-dtbncx+xml", "ncx" },
				{ "application/x-dtbook+xml", "dtb" },
				{ "application/x-dtbresource+xml", "res" },
				{ "application/x-dvi", "dvi" },
				{ "application/x-font-bdf", "bdf" },
				{ "application/x-font-ghostscript", "gsf" },
				{ "application/x-font-linux-psf", "psf" },
				{ "application/x-font-otf", "otf" },
				{ "application/x-font-pcf", "pcf" },
				{ "application/x-font-snf", "snf" },
				{ "application/x-font-ttf", "ttf" },
				{ "application/x-font-type1", "afm" },
				{ "application/x-font-woff", "woff" },
				{ "application/x-futuresplash", "spl" },
				{ "application/x-gnumeric", "gnumeric" },
				{ "application/x-gtar", "gtar" },
				{ "application/x-hdf", "hdf" },
				{ "application/x-java-jnlp-file", "jnlp" },
				{ "application/x-latex", "latex" },
				{ "application/x-mobipocket-ebook", "mobi" },
				{ "application/x-mpegurl", "m3u8" },
				{ "application/x-ms-application", "application" },
				{ "application/x-ms-wmd", "wmd" },
				{ "application/x-ms-wmz", "wmz" },
				{ "application/x-ms-xbap", "xbap" },
				{ "application/x-msaccess", "mdb" },
				{ "application/x-msbinder", "obd" },
				{ "application/x-mscardfile", "crd" },
				{ "application/x-msclip", "clp" },
				{ "application/x-msmediaview", "mvb" },
				{ "application/x-msmetafile", "wmf" },
				{ "application/x-msmoney", "mny" },
				{ "application/x-mspublisher", "pub" },
				{ "application/x-msschedule", "scd" },
				{ "application/x-msterminal", "trm" },
				{ "application/x-mswrite", "wri" },
				{ "application/x-netcdf", "nc" },
				{ "application/x-pkcs12", "p12" },
				{ "application/x-pkcs7-certificates", "p7b" },
				{ "application/x-pkcs7-certreqresp", "p7r" },
				{ "application/x-rar-compressed", "rar" },
				{ "application/x-sh", "sh" },
				{ "application/x-shar", "shar" },
				{ "application/x-shockwave-flash", "swf" },
				{ "application/x-silverlight-app", "xap" },
				{ "application/x-stuffit", "sit" },
				{ "application/x-stuffitx", "sitx" },
				{ "application/x-sv4cpio", "sv4cpio" },
				{ "application/x-sv4crc", "sv4crc" },
				{ "application/x-tar", "tar" },
				{ "application/x-tcl", "tcl" },
				{ "application/x-tex", "tex" },
				{ "application/x-tex-tfm", "tfm" },
				{ "application/x-texinfo", "texi" },
				{ "application/x-ustar", "ustar" },
				{ "application/x-wais-source", "src" },
				{ "application/x-x509-ca-cert", "crt" },
				{ "application/x-xfig", "fig" },
				{ "application/x-xpinstall", "xpi" },
				{ "application/xcap-diff+xml", "xdf" },
				{ "application/xenc+xml", "xenc" },
				{ "application/xhtml+xml", "xhtml" },
				{ "application/xml", "xml" },
				{ "application/xml-dtd", "dtd" },
				{ "application/xop+xml", "xop" },
				{ "application/xslt+xml", "xslt" },
				{ "application/xspf+xml", "xspf" },
				{ "application/xv+xml", "xvml" },
				{ "application/yang", "yang" },
				{ "application/yin+xml", "yin" },
				{ "application/zip", "zip" },
				{ "audio/adpcm", "adp" },
				{ "audio/basic", "au" },
				{ "audio/midi", "mid" },
				{ "audio/mp4", "mp4a" },
				{ "audio/mp4a-latm", "m4a" },
				{ "audio/mpeg", "mpga" },
				{ "audio/ogg", "ogg" },
				{ "audio/vnd.dece.audio", "uvva" },
				{ "audio/vnd.digital-winds", "eol" },
				{ "audio/vnd.dra", "dra" },
				{ "audio/vnd.dts", "dts" },
				{ "audio/vnd.dts.hd", "dtshd" },
				{ "audio/vnd.lucent.voice", "lvp" },
				{ "audio/vnd.ms-playready.media.pya", "pya" },
				{ "audio/vnd.nuera.ecelp4800", "ecelp4800" },
				{ "audio/vnd.nuera.ecelp7470", "ecelp7470" },
				{ "audio/vnd.nuera.ecelp9600", "ecelp9600" },
				{ "audio/vnd.rip", "rip" },
				{ "audio/webm", "weba" },
				{ "audio/x-aac", "aac" },
				{ "audio/x-aiff", "aiff" },
				{ "audio/x-mpegurl", "m3u" },
				{ "audio/x-ms-wax", "wax" },
				{ "audio/x-ms-wma", "wma" },
				{ "audio/x-pn-realaudio", "ram" },
				{ "audio/x-pn-realaudio-plugin", "rmp" },
				{ "audio/x-wav", "wav" },
				{ "chemical/x-cdx", "cdx" },
				{ "chemical/x-cif", "cif" },
				{ "chemical/x-cmdf", "cmdf" },
				{ "chemical/x-cml", "cml" },
				{ "chemical/x-csml", "csml" },
				{ "chemical/x-xyz", "xyz" },
				{ "image/bmp", "bmp" },
				{ "image/cgm", "cgm" },
				{ "image/g3fax", "g3" },
				{ "image/gif", "gif" },
				{ "image/ief", "ief" },
				{ "image/jp2", "jp2" },
				{ "image/jpeg", "jpg" },
				{ "image/ktx", "ktx" },
				{ "image/pict", "pict" },
				{ "image/png", "png" },
				{ "image/prs.btif", "btif" },
				{ "image/svg+xml", "svg" },
				{ "image/tiff", "tiff" },
				{ "image/vnd.adobe.photoshop", "psd" },
				{ "image/vnd.dece.graphic", "uvi" },
				{ "image/vnd.djvu", "djvu" },
				{ "image/vnd.dvb.subtitle", "sub" },
				{ "image/vnd.dwg", "dwg" },
				{ "image/vnd.dxf", "dxf" },
				{ "image/vnd.fastbidsheet", "fbs" },
				{ "image/vnd.fpx", "fpx" },
				{ "image/vnd.fst", "fst" },
				{ "image/vnd.fujixerox.edmics-mmr", "mmr" },
				{ "image/vnd.fujixerox.edmics-rlc", "rlc" },
				{ "image/vnd.ms-modi", "mdi" },
				{ "image/vnd.net-fpx", "npx" },
				{ "image/vnd.wap.wbmp", "wbmp" },
				{ "image/vnd.xiff", "xif" },
				{ "image/webp", "webp" },
				{ "image/x-cmu-raster", "ras" },
				{ "image/x-cmx", "cmx" },
				{ "image/x-freehand", "fh" },
				{ "image/x-icon", "ico" },
				{ "image/x-macpaint", "pntg" },
				{ "image/x-pcx", "pcx" },
				{ "image/x-pict", "pict" },
				{ "image/x-portable-anymap", "pnm" },
				{ "image/x-portable-bitmap", "pbm" },
				{ "image/x-portable-graymap", "pgm" },
				{ "image/x-portable-pixmap", "ppm" },
				{ "image/x-quicktime", "qtif" },
				{ "image/x-rgb", "rgb" },
				{ "image/x-xbitmap", "xbm" },
				{ "image/x-xpixmap", "xpm" },
				{ "image/x-xwindowdump", "xwd" },
				{ "message/rfc822", "eml" },
				{ "model/iges", "iges" },
				{ "model/mesh", "mesh" },
				{ "model/vnd.collada+xml", "dae" },
				{ "model/vnd.dwf", "dwf" },
				{ "model/vnd.gdl", "gdl" },
				{ "model/vnd.gtw", "gtw" },
				{ "model/vnd.mts", "mts" },
				{ "model/vnd.vtu", "vtu" },
				{ "model/vrml", "vrml" },
				{ "text/cache-manifest", "manifest" },
				{ "text/calendar", "ics" },
				{ "text/css", "css" },
				{ "text/csv", "csv" },
				{ "text/html", "html" },
				{ "text/n3", "n3" },
				{ "text/plain", "txt" },
				{ "text/prs.lines.tag", "dsc" },
				{ "text/richtext", "rtx" },
				{ "text/sgml", "sgml" },
				{ "text/tab-separated-values", "tsv" },
				{ "text/troff", "roff" },
				{ "text/turtle", "ttl" },
				{ "text/uri-list", "urls" },
				{ "text/vnd.curl", "curl" },
				{ "text/vnd.curl.dcurl", "dcurl" },
				{ "text/vnd.curl.mcurl", "mcurl" },
				{ "text/vnd.curl.scurl", "scurl" },
				{ "text/vnd.fly", "fly" },
				{ "text/vnd.fmi.flexstor", "flx" },
				{ "text/vnd.graphviz", "gv" },
				{ "text/vnd.in3d.3dml", "3dml" },
				{ "text/vnd.in3d.spot", "spot" },
				{ "text/vnd.sun.j2me.app-descriptor", "jad" },
				{ "text/vnd.wap.wml", "wml" },
				{ "text/vnd.wap.wmlscript", "wmls" },
				{ "text/x-asm", "asm" },
				{ "text/x-c", "c" },
				{ "text/x-fortran", "f" },
				{ "text/x-java-source", "java" },
				{ "text/x-pascal", "pas" },
				{ "text/x-setext", "etx" },
				{ "text/x-uuencode", "uu" },
				{ "text/x-vcalendar", "vcs" },
				{ "text/x-vcard", "vcf" },
				{ "video/3gpp", "3gp" },
				{ "video/3gpp2", "3g2" },
				{ "video/h261", "h261" },
				{ "video/h263", "h263" },
				{ "video/h264", "h264" },
				{ "video/jpeg", "jpgv" },
				{ "video/jpm", "jpm" },
				{ "video/mj2", "mj2" },
				{ "video/mp2t", "ts" },
				{ "video/mp4", "m4v" },
				{ "video/mpeg", "mpg" },
				{ "video/ogg", "ogv" },
				{ "video/quicktime", "mov" },
				{ "video/vnd.dece.hd", "uvvh" },
				{ "video/vnd.dece.mobile", "uvvm" },
				{ "video/vnd.dece.pd", "uvvp" },
				{ "video/vnd.dece.sd", "uvvs" },
				{ "video/vnd.dece.video", "uvvv" },
				{ "video/vnd.fvt", "fvt" },
				{ "video/vnd.mpegurl", "m4u" },
				{ "video/vnd.ms-playready.media.pyv", "pyv" },
				{ "video/vnd.uvvu.mp4", "uvvu" },
				{ "video/vnd.vivo", "viv" },
				{ "video/webm", "webm" },
				{ "video/x-dv", "dv" },
				{ "video/x-f4v", "f4v" },
				{ "video/x-fli", "fli" },
				{ "video/x-flv", "flv" },
				{ "video/x-m4v", "m4v" },
				{ "video/x-ms-asf", "asf" },
				{ "video/x-ms-wm", "wm" },
				{ "video/x-ms-wmv", "wmv" },
				{ "video/x-ms-wmx", "wmx" },
				{ "video/x-ms-wvx", "wvx" },
				{ "video/x-msvideo", "avi" },
				{ "video/x-sgi-movie", "movie" },
				{ "x-conference/x-cooltalk", "ice" },
			};

			/* Strip anything after a semicolon (e.g. text/html; charset=utf-8) */
			std::string_view base_type(mime_type);
			std::string_view::size_type semicolon_pos = base_type.find_first_of(";");
			if (semicolon_pos != std::string_view::npos)
			{
				base_type = base_type.substr(0, semicolon_pos);
			}

			/* Downcase it for comparsion purposes */
			//std::transform(base_type.begin(), base_type.end(), base_type.begin(), [](unsigned char c) { return std::tolower(c); });

			/* Look it up in the map */
			return mime_map[base_type];

			//return { "application/text" };
		}

		template<typename = void>
		std::string_view extension_to_mimetype(std::string_view extension)
		{
			static std::unordered_map<std::string_view, std::string_view> extension_map =
			{
				/* Generated from an OSX-provided mime.types, massaged somewhat by hand */
				{"ez","application/andrew-inset"},
				{"aw","application/applixware"},
				{"atom","application/atom+xml"},
				{"atomcat","application/atomcat+xml"},
				{"atomsvc","application/atomsvc+xml"},
				{"ccxml","application/ccxml+xml"},
				{"cdmia","application/cdmi-capability"},
				{"cdmic","application/cdmi-container"},
				{"cdmid","application/cdmi-domain"},
				{"cdmio","application/cdmi-object"},
				{"cdmiq","application/cdmi-queue"},
				{"cu","application/cu-seeme"},
				{"davmount","application/davmount+xml"},
				{"dssc","application/dssc+der"},
				{"xdssc","application/dssc+xml"},
				{"ecma","application/ecmascript"},
				{"emma","application/emma+xml"},
				{"epub","application/epub+zip"},
				{"exi","application/exi"},
				{"pfr","application/font-tdpfr"},
				{"stk","application/hyperstudio"},
				{"ipfix","application/ipfix"},
				{"jar","application/java-archive"},
				{"ser","application/java-serialized-object"},
				{"class","application/java-vm"},
				{"js","application/javascript"},
				{"json","application/json"},
				{"lostxml","application/lost+xml"},
				{"hqx","application/mac-binhex40"},
				{"cpt","application/mac-compactpro"},
				{"mads","application/mads+xml"},
				{"mrc","application/marc"},
				{"mrcx","application/marcxml+xml"},
				{"mb","application/mathematica"},
				{"mathml","application/mathml+xml"},
				{"mbox","application/mbox"},
				{"mscml","application/mediaservercontrol+xml"},
				{"meta4","application/metalink4+xml"},
				{"mets","application/mets+xml"},
				{"mods","application/mods+xml"},
				{"mp21","application/mp21"},
				{"mp4s","application/mp4"},
				{"doc","application/msword"},
				{"mxf","application/mxf"},
				{"oda","application/oda"},
				{"opf","application/oebps-package+xml"},
				{"ogx","application/ogg"},
				{"onetoc","application/onenote"},
				{"xer","application/patch-ops-error+xml"},
				{"pdf","application/pdf"},
				{"pgp","application/pgp-encrypted"},
				{"asc","application/pgp-signature"},
				{"prf","application/pics-rules"},
				{"p10","application/pkcs10"},
				{"p7m","application/pkcs7-mime"},
				{"p7s","application/pkcs7-signature"},
				{"p8","application/pkcs8"},
				{"ac","application/pkix-attr-cert"},
				{"cer","application/pkix-cert"},
				{"crl","application/pkix-crl"},
				{"pkipath","application/pkix-pkipath"},
				{"pki","application/pkixcmp"},
				{"pls","application/pls+xml"},
				{"ps","application/postscript"},
				{"cww","application/prs.cww"},
				{"pskcxml","application/pskc+xml"},
				{"rdf","application/rdf+xml"},
				{"rif","application/reginfo+xml"},
				{"rnc","application/relax-ng-compact-syntax"},
				{"rl","application/resource-lists+xml"},
				{"rld","application/resource-lists-diff+xml"},
				{"rs","application/rls-services+xml"},
				{"rsd","application/rsd+xml"},
				{"rss","application/rss+xml"},
				{"rtf","application/rtf"},
				{"sbml","application/sbml+xml"},
				{"scq","application/scvp-cv-request"},
				{"scs","application/scvp-cv-response"},
				{"spq","application/scvp-vp-request"},
				{"spp","application/scvp-vp-response"},
				{"sdp","application/sdp"},
				{"setpay","application/set-payment-initiation"},
				{"setreg","application/set-registration-initiation"},
				{"shf","application/shf+xml"},
				{"smil","application/smil+xml"},
				{"rq","application/sparql-query"},
				{"srx","application/sparql-results+xml"},
				{"gram","application/srgs"},
				{"grxml","application/srgs+xml"},
				{"sru","application/sru+xml"},
				{"ssml","application/ssml+xml"},
				{"teicorpus","application/tei+xml"},
				{"tfi","application/thraud+xml"},
				{"tsd","application/timestamped-data"},
				{"plb","application/vnd.3gpp.pic-bw-large"},
				{"psb","application/vnd.3gpp.pic-bw-small"},
				{"pvb","application/vnd.3gpp.pic-bw-var"},
				{"tcap","application/vnd.3gpp2.tcap"},
				{"pwn","application/vnd.3m.post-it-notes"},
				{"aso","application/vnd.accpac.simply.aso"},
				{"imp","application/vnd.accpac.simply.imp"},
				{"acu","application/vnd.acucobol"},
				{"atc","application/vnd.acucorp"},
				{"air","application/vnd.adobe.air-application-installer-package+zip"},
				{"fxp","application/vnd.adobe.fxp"},
				{"xdp","application/vnd.adobe.xdp+xml"},
				{"xfdf","application/vnd.adobe.xfdf"},
				{"ahead","application/vnd.ahead.space"},
				{"azf","application/vnd.airzip.filesecure.azf"},
				{"azs","application/vnd.airzip.filesecure.azs"},
				{"azw","application/vnd.amazon.ebook"},
				{"acc","application/vnd.americandynamics.acc"},
				{"ami","application/vnd.amiga.ami"},
				{"apk","application/vnd.android.package-archive"},
				{"cii","application/vnd.anser-web-certificate-issue-initiation"},
				{"fti","application/vnd.anser-web-funds-transfer-initiation"},
				{"atx","application/vnd.antix.game-component"},
				{"mpkg","application/vnd.apple.installer+xml"},
				{"m3u8","application/vnd.apple.mpegurl"},
				{"swi","application/vnd.aristanetworks.swi"},
				{"aep","application/vnd.audiograph"},
				{"mpm","application/vnd.blueice.multipass"},
				{"bmi","application/vnd.bmi"},
				{"rep","application/vnd.businessobjects"},
				{"cdxml","application/vnd.chemdraw+xml"},
				{"mmd","application/vnd.chipnuts.karaoke-mmd"},
				{"cdy","application/vnd.cinderella"},
				{"cla","application/vnd.claymore"},
				{"rp9","application/vnd.cloanto.rp9"},
				{"c4g","application/vnd.clonk.c4group"},
				{"c11amc","application/vnd.cluetrust.cartomobile-config"},
				{"c11amz","application/vnd.cluetrust.cartomobile-config-pkg"},
				{"csp","application/vnd.commonspace"},
				{"cdbcmsg","application/vnd.contact.cmsg"},
				{"cmc","application/vnd.cosmocaller"},
				{"clkx","application/vnd.crick.clicker"},
				{"clkk","application/vnd.crick.clicker.keyboard"},
				{"clkp","application/vnd.crick.clicker.palette"},
				{"clkt","application/vnd.crick.clicker.template"},
				{"clkw","application/vnd.crick.clicker.wordbank"},
				{"wbs","application/vnd.criticaltools.wbs+xml"},
				{"pml","application/vnd.ctc-posml"},
				{"ppd","application/vnd.cups-ppd"},
				{"car","application/vnd.curl.car"},
				{"pcurl","application/vnd.curl.pcurl"},
				{"rdz","application/vnd.data-vision.rdz"},
				{"fe_launch","application/vnd.denovo.fcselayout-link"},
				{"dna","application/vnd.dna"},
				{"mlp","application/vnd.dolby.mlp"},
				{"dpg","application/vnd.dpgraph"},
				{"dfac","application/vnd.dreamfactory"},
				{"ait","application/vnd.dvb.ait"},
				{"svc","application/vnd.dvb.service"},
				{"geo","application/vnd.dynageo"},
				{"mag","application/vnd.ecowin.chart"},
				{"nml","application/vnd.enliven"},
				{"esf","application/vnd.epson.esf"},
				{"msf","application/vnd.epson.msf"},
				{"qam","application/vnd.epson.quickanime"},
				{"slt","application/vnd.epson.salt"},
				{"ssf","application/vnd.epson.ssf"},
				{"es3","application/vnd.eszigno3+xml"},
				{"ez2","application/vnd.ezpix-album"},
				{"ez3","application/vnd.ezpix-package"},
				{"fdf","application/vnd.fdf"},
				{"mseed","application/vnd.fdsn.mseed"},
				{"seed","application/vnd.fdsn.seed"},
				{"gph","application/vnd.flographit"},
				{"ftc","application/vnd.fluxtime.clip"},
				{"fm","application/vnd.framemaker"},
				{"fnc","application/vnd.frogans.fnc"},
				{"ltf","application/vnd.frogans.ltf"},
				{"fsc","application/vnd.fsc.weblaunch"},
				{"oas","application/vnd.fujitsu.oasys"},
				{"oa2","application/vnd.fujitsu.oasys2"},
				{"oa3","application/vnd.fujitsu.oasys3"},
				{"fg5","application/vnd.fujitsu.oasysgp"},
				{"bh2","application/vnd.fujitsu.oasysprs"},
				{"ddd","application/vnd.fujixerox.ddd"},
				{"xdw","application/vnd.fujixerox.docuworks"},
				{"xbd","application/vnd.fujixerox.docuworks.binder"},
				{"fzs","application/vnd.fuzzysheet"},
				{"txd","application/vnd.genomatix.tuxedo"},
				{"ggb","application/vnd.geogebra.file"},
				{"ggt","application/vnd.geogebra.tool"},
				{"gex","application/vnd.geometry-explorer"},
				{"gxt","application/vnd.geonext"},
				{"g2w","application/vnd.geoplan"},
				{"g3w","application/vnd.geospace"},
				{"gmx","application/vnd.gmx"},
				{"kml","application/vnd.google-earth.kml+xml"},
				{"kmz","application/vnd.google-earth.kmz"},
				{"gqf","application/vnd.grafeq"},
				{"gac","application/vnd.groove-account"},
				{"ghf","application/vnd.groove-help"},
				{"gim","application/vnd.groove-identity-message"},
				{"grv","application/vnd.groove-injector"},
				{"gtm","application/vnd.groove-tool-message"},
				{"tpl","application/vnd.groove-tool-template"},
				{"vcg","application/vnd.groove-vcard"},
				{"hal","application/vnd.hal+xml"},
				{"zmm","application/vnd.handheld-entertainment+xml"},
				{"hbci","application/vnd.hbci"},
				{"les","application/vnd.hhe.lesson-player"},
				{"hpgl","application/vnd.hp-hpgl"},
				{"hpid","application/vnd.hp-hpid"},
				{"hps","application/vnd.hp-hps"},
				{"jlt","application/vnd.hp-jlyt"},
				{"pcl","application/vnd.hp-pcl"},
				{"pclxl","application/vnd.hp-pclxl"},
				{"sfd-hdstx","application/vnd.hydrostatix.sof-data"},
				{"x3d","application/vnd.hzn-3d-crossword"},
				{"mpy","application/vnd.ibm.minipay"},
				{"afp","application/vnd.ibm.modcap"},
				{"irm","application/vnd.ibm.rights-management"},
				{"sc","application/vnd.ibm.secure-container"},
				{"icc","application/vnd.iccprofile"},
				{"igl","application/vnd.igloader"},
				{"ivp","application/vnd.immervision-ivp"},
				{"ivu","application/vnd.immervision-ivu"},
				{"igm","application/vnd.insors.igm"},
				{"xpw","application/vnd.intercon.formnet"},
				{"i2g","application/vnd.intergeo"},
				{"qbo","application/vnd.intu.qbo"},
				{"qfx","application/vnd.intu.qfx"},
				{"rcprofile","application/vnd.ipunplugged.rcprofile"},
				{"irp","application/vnd.irepository.package+xml"},
				{"xpr","application/vnd.is-xpr"},
				{"fcs","application/vnd.isac.fcs"},
				{"jam","application/vnd.jam"},
				{"rms","application/vnd.jcp.javame.midlet-rms"},
				{"jisp","application/vnd.jisp"},
				{"joda","application/vnd.joost.joda-archive"},
				{"ktz","application/vnd.kahootz"},
				{"karbon","application/vnd.kde.karbon"},
				{"chrt","application/vnd.kde.kchart"},
				{"kfo","application/vnd.kde.kformula"},
				{"flw","application/vnd.kde.kivio"},
				{"kon","application/vnd.kde.kontour"},
				{"kpr","application/vnd.kde.kpresenter"},
				{"ksp","application/vnd.kde.kspread"},
				{"kwd","application/vnd.kde.kword"},
				{"htke","application/vnd.kenameaapp"},
				{"kia","application/vnd.kidspiration"},
				{"knp","application/vnd.kinar"},
				{"skp","application/vnd.koan"},
				{"sse","application/vnd.kodak-descriptor"},
				{"lasxml","application/vnd.las.las+xml"},
				{"lbd","application/vnd.llamagraphics.life-balance.desktop"},
				{"lbe","application/vnd.llamagraphics.life-balance.exchange+xml"},
				{"123","application/vnd.lotus-1-2-3"},
				{"apr","application/vnd.lotus-approach"},
				{"pre","application/vnd.lotus-freelance"},
				{"nsf","application/vnd.lotus-notes"},
				{"org","application/vnd.lotus-organizer"},
				{"scm","application/vnd.lotus-screencam"},
				{"lwp","application/vnd.lotus-wordpro"},
				{"portpkg","application/vnd.macports.portpkg"},
				{"mcd","application/vnd.mcd"},
				{"mc1","application/vnd.medcalcdata"},
				{"cdkey","application/vnd.mediastation.cdkey"},
				{"mwf","application/vnd.mfer"},
				{"mfm","application/vnd.mfmp"},
				{"flo","application/vnd.micrografx.flo"},
				{"igx","application/vnd.micrografx.igx"},
				{"mif","application/vnd.mif"},
				{"daf","application/vnd.mobius.daf"},
				{"dis","application/vnd.mobius.dis"},
				{"mbk","application/vnd.mobius.mbk"},
				{"mqy","application/vnd.mobius.mqy"},
				{"msl","application/vnd.mobius.msl"},
				{"plc","application/vnd.mobius.plc"},
				{"txf","application/vnd.mobius.txf"},
				{"mpn","application/vnd.mophun.application"},
				{"mpc","application/vnd.mophun.certificate"},
				{"xul","application/vnd.mozilla.xul+xml"},
				{"cil","application/vnd.ms-artgalry"},
				{"cab","application/vnd.ms-cab-compressed"},
				{"xls","application/vnd.ms-excel"},
				{"xlam","application/vnd.ms-excel.addin.macroenabled.12"},
				{"xlsb","application/vnd.ms-excel.sheet.binary.macroenabled.12"},
				{"xlsm","application/vnd.ms-excel.sheet.macroenabled.12"},
				{"xltm","application/vnd.ms-excel.template.macroenabled.12"},
				{"eot","application/vnd.ms-fontobject"},
				{"chm","application/vnd.ms-htmlhelp"},
				{"ims","application/vnd.ms-ims"},
				{"lrm","application/vnd.ms-lrm"},
				{"thmx","application/vnd.ms-officetheme"},
				{"cat","application/vnd.ms-pki.seccat"},
				{"stl","application/vnd.ms-pki.stl"},
				{"ppt","application/vnd.ms-powerpoint"},
				{"ppam","application/vnd.ms-powerpoint.addin.macroenabled.12"},
				{"pptm","application/vnd.ms-powerpoint.presentation.macroenabled.12"},
				{"sldm","application/vnd.ms-powerpoint.slide.macroenabled.12"},
				{"ppsm","application/vnd.ms-powerpoint.slideshow.macroenabled.12"},
				{"potm","application/vnd.ms-powerpoint.template.macroenabled.12"},
				{"mpp","application/vnd.ms-project"},
				{"docm","application/vnd.ms-word.document.macroenabled.12"},
				{"dotm","application/vnd.ms-word.template.macroenabled.12"},
				{"wps","application/vnd.ms-works"},
				{"wpl","application/vnd.ms-wpl"},
				{"xps","application/vnd.ms-xpsdocument"},
				{"mseq","application/vnd.mseq"},
				{"mus","application/vnd.musician"},
				{"msty","application/vnd.muvee.style"},
				{"nlu","application/vnd.neurolanguage.nlu"},
				{"nnd","application/vnd.noblenet-directory"},
				{"nns","application/vnd.noblenet-sealer"},
				{"nnw","application/vnd.noblenet-web"},
				{"ngdat","application/vnd.nokia.n-gage.data"},
				{"n-gage","application/vnd.nokia.n-gage.symbian.install"},
				{"rpst","application/vnd.nokia.radio-preset"},
				{"rpss","application/vnd.nokia.radio-presets"},
				{"edm","application/vnd.novadigm.edm"},
				{"edx","application/vnd.novadigm.edx"},
				{"ext","application/vnd.novadigm.ext"},
				{"odc","application/vnd.oasis.opendocument.chart"},
				{"otc","application/vnd.oasis.opendocument.chart-template"},
				{"odb","application/vnd.oasis.opendocument.database"},
				{"odf","application/vnd.oasis.opendocument.formula"},
				{"odft","application/vnd.oasis.opendocument.formula-template"},
				{"odg","application/vnd.oasis.opendocument.graphics"},
				{"otg","application/vnd.oasis.opendocument.graphics-template"},
				{"odi","application/vnd.oasis.opendocument.image"},
				{"oti","application/vnd.oasis.opendocument.image-template"},
				{"odp","application/vnd.oasis.opendocument.presentation"},
				{"otp","application/vnd.oasis.opendocument.presentation-template"},
				{"ods","application/vnd.oasis.opendocument.spreadsheet"},
				{"ots","application/vnd.oasis.opendocument.spreadsheet-template"},
				{"odt","application/vnd.oasis.opendocument.text"},
				{"odm","application/vnd.oasis.opendocument.text-master"},
				{"ott","application/vnd.oasis.opendocument.text-template"},
				{"oth","application/vnd.oasis.opendocument.text-web"},
				{"xo","application/vnd.olpc-sugar"},
				{"dd2","application/vnd.oma.dd2+xml"},
				{"oxt","application/vnd.openofficeorg.extension"},
				{"pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"},
				{"sldx","application/vnd.openxmlformats-officedocument.presentationml.slide"},
				{"ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow"},
				{"potx","application/vnd.openxmlformats-officedocument.presentationml.template"},
				{"xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
				{"xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"},
				{"docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
				{"dotx","application/vnd.openxmlformats-officedocument.wordprocessingml.template"},
				{"mgp","application/vnd.osgeo.mapguide.package"},
				{"dp","application/vnd.osgi.dp"},
				{"pdb","application/vnd.palm"},
				{"paw","application/vnd.pawaafile"},
				{"str","application/vnd.pg.format"},
				{"ei6","application/vnd.pg.osasli"},
				{"efif","application/vnd.picsel"},
				{"wg","application/vnd.pmi.widget"},
				{"plf","application/vnd.pocketlearn"},
				{"pbd","application/vnd.powerbuilder6"},
				{"box","application/vnd.previewsystems.box"},
				{"mgz","application/vnd.proteus.magazine"},
				{"qps","application/vnd.publishare-delta-tree"},
				{"ptid","application/vnd.pvi.ptid1"},
				{"qxd","application/vnd.quark.quarkxpress"},
				{"bed","application/vnd.realvnc.bed"},
				{"mxl","application/vnd.recordare.musicxml"},
				{"musicxml","application/vnd.recordare.musicxml+xml"},
				{"cryptonote","application/vnd.rig.cryptonote"},
				{"cod","application/vnd.rim.cod"},
				{"rm","application/vnd.rn-realmedia"},
				{"link66","application/vnd.route66.link66+xml"},
				{"st","application/vnd.sailingtracker.track"},
				{"see","application/vnd.seemail"},
				{"sema","application/vnd.sema"},
				{"semd","application/vnd.semd"},
				{"semf","application/vnd.semf"},
				{"ifm","application/vnd.shana.informed.formdata"},
				{"itp","application/vnd.shana.informed.formtemplate"},
				{"iif","application/vnd.shana.informed.interchange"},
				{"ipk","application/vnd.shana.informed.package"},
				{"twd","application/vnd.simtech-mindmapper"},
				{"mmf","application/vnd.smaf"},
				{"teacher","application/vnd.smart.teacher"},
				{"sdkm","application/vnd.solent.sdkm+xml"},
				{"dxp","application/vnd.spotfire.dxp"},
				{"sfs","application/vnd.spotfire.sfs"},
				{"sdc","application/vnd.stardivision.calc"},
				{"sda","application/vnd.stardivision.draw"},
				{"sdd","application/vnd.stardivision.impress"},
				{"smf","application/vnd.stardivision.math"},
				{"sdw","application/vnd.stardivision.writer"},
				{"sgl","application/vnd.stardivision.writer-global"},
				{"sm","application/vnd.stepmania.stepchart"},
				{"sxc","application/vnd.sun.xml.calc"},
				{"stc","application/vnd.sun.xml.calc.template"},
				{"sxd","application/vnd.sun.xml.draw"},
				{"std","application/vnd.sun.xml.draw.template"},
				{"sxi","application/vnd.sun.xml.impress"},
				{"sti","application/vnd.sun.xml.impress.template"},
				{"sxm","application/vnd.sun.xml.math"},
				{"sxw","application/vnd.sun.xml.writer"},
				{"sxg","application/vnd.sun.xml.writer.global"},
				{"stw","application/vnd.sun.xml.writer.template"},
				{"sus","application/vnd.sus-calendar"},
				{"svd","application/vnd.svd"},
				{"sis","application/vnd.symbian.install"},
				{"xsm","application/vnd.syncml+xml"},
				{"bdm","application/vnd.syncml.dm+wbxml"},
				{"xdm","application/vnd.syncml.dm+xml"},
				{"tao","application/vnd.tao.intent-module-archive"},
				{"tmo","application/vnd.tmobile-livetv"},
				{"tpt","application/vnd.trid.tpt"},
				{"mxs","application/vnd.triscape.mxs"},
				{"tra","application/vnd.trueapp"},
				{"ufdl","application/vnd.ufdl"},
				{"utz","application/vnd.uiq.theme"},
				{"umj","application/vnd.umajin"},
				{"unityweb","application/vnd.unity"},
				{"uoml","application/vnd.uoml+xml"},
				{"vcx","application/vnd.vcx"},
				{"vsd","application/vnd.visio"},
				{"vis","application/vnd.visionary"},
				{"vsf","application/vnd.vsf"},
				{"wbxml","application/vnd.wap.wbxml"},
				{"wmlc","application/vnd.wap.wmlc"},
				{"wmlsc","application/vnd.wap.wmlscriptc"},
				{"wtb","application/vnd.webturbo"},
				{"nbp","application/vnd.wolfram.player"},
				{"wpd","application/vnd.wordperfect"},
				{"wqd","application/vnd.wqd"},
				{"stf","application/vnd.wt.stf"},
				{"xar","application/vnd.xara"},
				{"xfdl","application/vnd.xfdl"},
				{"hvd","application/vnd.yamaha.hv-dic"},
				{"hvs","application/vnd.yamaha.hv-script"},
				{"hvp","application/vnd.yamaha.hv-voice"},
				{"osf","application/vnd.yamaha.openscoreformat"},
				{"osfpvg","application/vnd.yamaha.openscoreformat.osfpvg+xml"},
				{"saf","application/vnd.yamaha.smaf-audio"},
				{"spf","application/vnd.yamaha.smaf-phrase"},
				{"cmp","application/vnd.yellowriver-custom-menu"},
				{"zir","application/vnd.zul"},
				{"zaz","application/vnd.zzazz.deck+xml"},
				{"vxml","application/voicexml+xml"},
				{"wgt","application/widget"},
				{"hlp","application/winhlp"},
				{"wsdl","application/wsdl+xml"},
				{"wspolicy","application/wspolicy+xml"},
				{"7z","application/x-7z-compressed"},
				{"abw","application/x-abiword"},
				{"ace","application/x-ace-compressed"},
				{"aam","application/x-authorware-map"},
				{"aas","application/x-authorware-seg"},
				{"bcpio","application/x-bcpio"},
				{"torrent","application/x-bittorrent"},
				{"bz","application/x-bzip"},
				{"bz2","application/x-bzip2"},
				{"vcd","application/x-cdlink"},
				{"chat","application/x-chat"},
				{"pgn","application/x-chess-pgn"},
				{"cpio","application/x-cpio"},
				{"csh","application/x-csh"},
				{"deb","application/x-debian-package"},
				{"dir","application/x-director"},
				{"wad","application/x-doom"},
				{"ncx","application/x-dtbncx+xml"},
				{"dtb","application/x-dtbook+xml"},
				{"res","application/x-dtbresource+xml"},
				{"dvi","application/x-dvi"},
				{"bdf","application/x-font-bdf"},
				{"gsf","application/x-font-ghostscript"},
				{"psf","application/x-font-linux-psf"},
				{"otf","application/x-font-otf"},
				{"pcf","application/x-font-pcf"},
				{"snf","application/x-font-snf"},
				{"ttf","application/x-font-ttf"},
				{"afm","application/x-font-type1"},
				{"woff","application/x-font-woff"},
				{"spl","application/x-futuresplash"},
				{"gnumeric","application/x-gnumeric"},
				{"gtar","application/x-gtar"},
				{"hdf","application/x-hdf"},
				{"jnlp","application/x-java-jnlp-file"},
				{"latex","application/x-latex"},
				{"mobi","application/x-mobipocket-ebook"},
				{"m3u8","application/x-mpegurl"},
				{"application","application/x-ms-application"},
				{"wmd","application/x-ms-wmd"},
				{"wmz","application/x-ms-wmz"},
				{"xbap","application/x-ms-xbap"},
				{"mdb","application/x-msaccess"},
				{"obd","application/x-msbinder"},
				{"crd","application/x-mscardfile"},
				{"clp","application/x-msclip"},
				{"mvb","application/x-msmediaview"},
				{"wmf","application/x-msmetafile"},
				{"mny","application/x-msmoney"},
				{"pub","application/x-mspublisher"},
				{"scd","application/x-msschedule"},
				{"trm","application/x-msterminal"},
				{"wri","application/x-mswrite"},
				{"nc","application/x-netcdf"},
				{"p12","application/x-pkcs12"},
				{"p7b","application/x-pkcs7-certificates"},
				{"p7r","application/x-pkcs7-certreqresp"},
				{"rar","application/x-rar-compressed"},
				{"sh","application/x-sh"},
				{"shar","application/x-shar"},
				{"swf","application/x-shockwave-flash"},
				{"xap","application/x-silverlight-app"},
				{"sit","application/x-stuffit"},
				{"sitx","application/x-stuffitx"},
				{"sv4cpio","application/x-sv4cpio"},
				{"sv4crc","application/x-sv4crc"},
				{"tar","application/x-tar"},
				{"tcl","application/x-tcl"},
				{"tex","application/x-tex"},
				{"tfm","application/x-tex-tfm"},
				{"texi","application/x-texinfo"},
				{"ustar","application/x-ustar"},
				{"src","application/x-wais-source"},
				{"crt","application/x-x509-ca-cert"},
				{"fig","application/x-xfig"},
				{"xpi","application/x-xpinstall"},
				{"xdf","application/xcap-diff+xml"},
				{"xenc","application/xenc+xml"},
				{"xhtml","application/xhtml+xml"},
				{"xml","application/xml"},
				{"dtd","application/xml-dtd"},
				{"xop","application/xop+xml"},
				{"xslt","application/xslt+xml"},
				{"xspf","application/xspf+xml"},
				{"xvml","application/xv+xml"},
				{"yang","application/yang"},
				{"yin","application/yin+xml"},
				{"zip","application/zip"},
				{"adp","audio/adpcm"},
				{"au","audio/basic"},
				{"mid","audio/midi"},
				{"mp4a","audio/mp4"},
				{"m4a","audio/mp4a-latm"},
				{"mpga","audio/mpeg"},
				{"ogg","audio/ogg"},
				{"uvva","audio/vnd.dece.audio"},
				{"eol","audio/vnd.digital-winds"},
				{"dra","audio/vnd.dra"},
				{"dts","audio/vnd.dts"},
				{"dtshd","audio/vnd.dts.hd"},
				{"lvp","audio/vnd.lucent.voice"},
				{"pya","audio/vnd.ms-playready.media.pya"},
				{"ecelp4800","audio/vnd.nuera.ecelp4800"},
				{"ecelp7470","audio/vnd.nuera.ecelp7470"},
				{"ecelp9600","audio/vnd.nuera.ecelp9600"},
				{"rip","audio/vnd.rip"},
				{"weba","audio/webm"},
				{"aac","audio/x-aac"},
				{"aiff","audio/x-aiff"},
				{"m3u","audio/x-mpegurl"},
				{"wax","audio/x-ms-wax"},
				{"wma","audio/x-ms-wma"},
				{"ram","audio/x-pn-realaudio"},
				{"rmp","audio/x-pn-realaudio-plugin"},
				{"wav","audio/x-wav"},
				{"cdx","chemical/x-cdx"},
				{"cif","chemical/x-cif"},
				{"cmdf","chemical/x-cmdf"},
				{"cml","chemical/x-cml"},
				{"csml","chemical/x-csml"},
				{"xyz","chemical/x-xyz"},
				{"bmp","image/bmp"},
				{"cgm","image/cgm"},
				{"g3","image/g3fax"},
				{"gif","image/gif"},
				{"ief","image/ief"},
				{"jp2","image/jp2"},
				{"jpg","image/jpeg"},
				{"ktx","image/ktx"},
				{"pict","image/pict"},
				{"png","image/png"},
				{"btif","image/prs.btif"},
				{"svg","image/svg+xml"},
				{"tiff","image/tiff"},
				{"psd","image/vnd.adobe.photoshop"},
				{"uvi","image/vnd.dece.graphic"},
				{"djvu","image/vnd.djvu"},
				{"sub","image/vnd.dvb.subtitle"},
				{"dwg","image/vnd.dwg"},
				{"dxf","image/vnd.dxf"},
				{"fbs","image/vnd.fastbidsheet"},
				{"fpx","image/vnd.fpx"},
				{"fst","image/vnd.fst"},
				{"mmr","image/vnd.fujixerox.edmics-mmr"},
				{"rlc","image/vnd.fujixerox.edmics-rlc"},
				{"mdi","image/vnd.ms-modi"},
				{"npx","image/vnd.net-fpx"},
				{"wbmp","image/vnd.wap.wbmp"},
				{"xif","image/vnd.xiff"},
				{"webp","image/webp"},
				{"ras","image/x-cmu-raster"},
				{"cmx","image/x-cmx"},
				{"fh","image/x-freehand"},
				{"ico","image/x-icon"},
				{"pntg","image/x-macpaint"},
				{"pcx","image/x-pcx"},
				{"pict","image/x-pict"},
				{"pnm","image/x-portable-anymap"},
				{"pbm","image/x-portable-bitmap"},
				{"pgm","image/x-portable-graymap"},
				{"ppm","image/x-portable-pixmap"},
				{"qtif","image/x-quicktime"},
				{"rgb","image/x-rgb"},
				{"xbm","image/x-xbitmap"},
				{"xpm","image/x-xpixmap"},
				{"xwd","image/x-xwindowdump"},
				{"eml","message/rfc822"},
				{"iges","model/iges"},
				{"mesh","model/mesh"},
				{"dae","model/vnd.collada+xml"},
				{"dwf","model/vnd.dwf"},
				{"gdl","model/vnd.gdl"},
				{"gtw","model/vnd.gtw"},
				{"mts","model/vnd.mts"},
				{"vtu","model/vnd.vtu"},
				{"vrml","model/vrml"},
				{"manifest","text/cache-manifest"},
				{"ics","text/calendar"},
				{"css","text/css"},
				{"csv","text/csv"},
				{"html","text/html"},
				{"n3","text/n3"},
				{"txt","text/plain"},
				{"dsc","text/prs.lines.tag"},
				{"rtx","text/richtext"},
				{"sgml","text/sgml"},
				{"tsv","text/tab-separated-values"},
				{"roff","text/troff"},
				{"ttl","text/turtle"},
				{"urls","text/uri-list"},
				{"curl","text/vnd.curl"},
				{"dcurl","text/vnd.curl.dcurl"},
				{"mcurl","text/vnd.curl.mcurl"},
				{"scurl","text/vnd.curl.scurl"},
				{"fly","text/vnd.fly"},
				{"flx","text/vnd.fmi.flexstor"},
				{"gv","text/vnd.graphviz"},
				{"3dml","text/vnd.in3d.3dml"},
				{"spot","text/vnd.in3d.spot"},
				{"jad","text/vnd.sun.j2me.app-descriptor"},
				{"wml","text/vnd.wap.wml"},
				{"wmls","text/vnd.wap.wmlscript"},
				{"asm","text/x-asm"},
				{"c","text/x-c"},
				{"f","text/x-fortran"},
				{"java","text/x-java-source"},
				{"pas","text/x-pascal"},
				{"etx","text/x-setext"},
				{"uu","text/x-uuencode"},
				{"vcs","text/x-vcalendar"},
				{"vcf","text/x-vcard"},
				{"3gp","video/3gpp"},
				{"3g2","video/3gpp2"},
				{"h261","video/h261"},
				{"h263","video/h263"},
				{"h264","video/h264"},
				{"jpgv","video/jpeg"},
				{"jpm","video/jpm"},
				{"mj2","video/mj2"},
				{"ts","video/mp2t"},
				{"m4v","video/mp4"},
				{"mpg","video/mpeg"},
				{"ogv","video/ogg"},
				{"mov","video/quicktime"},
				{"uvvh","video/vnd.dece.hd"},
				{"uvvm","video/vnd.dece.mobile"},
				{"uvvp","video/vnd.dece.pd"},
				{"uvvs","video/vnd.dece.sd"},
				{"uvvv","video/vnd.dece.video"},
				{"fvt","video/vnd.fvt"},
				{"m4u","video/vnd.mpegurl"},
				{"pyv","video/vnd.ms-playready.media.pyv"},
				{"uvvu","video/vnd.uvvu.mp4"},
				{"viv","video/vnd.vivo"},
				{"webm","video/webm"},
				{"dv","video/x-dv"},
				{"f4v","video/x-f4v"},
				{"fli","video/x-fli"},
				{"flv","video/x-flv"},
				{"m4v","video/x-m4v"},
				{"asf","video/x-ms-asf"},
				{"wm","video/x-ms-wm"},
				{"wmv","video/x-ms-wmv"},
				{"wmx","video/x-ms-wmx"},
				{"wvx","video/x-ms-wvx"},
				{"avi","video/x-msvideo"},
				{"movie","video/x-sgi-movie"},
				{"ice","x-conference/x-cooltalk"},
			};

			std::string_view base_type(extension);
			std::string_view::size_type semicolon_pos = base_type.find_first_of(".");
			if (semicolon_pos != std::string_view::npos)
			{
				base_type = base_type.substr(semicolon_pos + 1);
			}

			/* Downcase it for comparsion purposes */
			//std::transform(base_type.begin(), base_type.end(), base_type.begin(), [](unsigned char c) { return std::tolower(c); });

			/* Look it up in the map */
			return extension_map[base_type];
		}
	}

	//void swap(std::map<std::string_view, std::string_view>& map)
	//{
	//	std::string s;
	//	for (auto &[k, v] : map)
	//	{
	//		s += "{\"" + std::string(v) + "\",\"" + std::string(k) + "\"},\r\n";
	//	}
	//	s;
	//}
}

#endif // !__ASIO2_MIME_TYPES_HPP__
